package cn.itcast.dmp.process
import org.apache.spark.sql.{DataFrame, SparkSession}
trait ReportProcessor {
  //目标表名字
  def targetTableName :String
  //提供目标表的分区键
  def targetTableKeys : Seq[String]
//  创建一个抽象方法专门对odsDF数据进行处理
  def realProcessData(odsDF: DataFrame): DataFrame


  //  传递一个DataFrame, 经过处理以后, 将结果数据DataFrame保存
def processData(odsDF: DataFrame):Unit={
  //获取sparksession实例对象
  val spark: SparkSession = odsDF.sparkSession
  // 第三、统计聚合分析
  // 调用一个方法专门对odsDF数据进行处理
  val reportDF: DataFrame = realProcessData(odsDF)
  // 结果数据保存到Kudu表中  需要使用隐式转换
  import cn.itcast.dmp.untils.KuduUtils._
  // a. 创建表，如果表存在不删除不创建 因为这里的数据时清洗后进行汇总的，一天产生一个，不能删除
spark.createKuduTable(targetTableName,reportDF.schema,targetTableKeys,isDelete = false)
  // b. 保存数据到Kudu表中, TODO: 由于每次统计表数据较少，可以考虑较低分区数目
  reportDF.coalesce(1).saveAsKuduTable(targetTableName)


}






}
